package com.chixing.day16_io.work;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class  Product {
    public int proId;

    public int getProId() {
        return proId;
    }

    public void setProId(int proId) {
        this.proId = proId;
    }


// 通过反射 判断proId 是否有get,set



    public static boolean hasGetMethod(Class clazz, String fieldName) {
        /*
           1.获得字段 proId 的数据类型 int
           2. Product 中找出 方法名为 "getProId" ,并且 参数列表是空的 null , 并且 返回值是int
              若存在这样的方法结构，说明对应的get方法是存在的
              否则就是不存在
        */
        Field[] fields = clazz.getFields();
        for (Field field:fields){
            if (field.getName().equals(fieldName)){
                System.out.println("proId 的数据类型"+field.getType());
            }
        }
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {

            Class<?>[] types = method.getParameterTypes(); //参数列表
            String type = null;
            for (Class<?> a:types) {
                type += a;
            }
            if(method.getName().equals(fieldName)&& type == null&& String.valueOf(method.getReturnType()).equals("int"))
                return true;
        }
        return false;
    }

    public static boolean hasSetMethod(Class clazz, String fieldName) {
          /*
           1.获得字段 proId 的数据类型 int
           2. Product 中找出 方法名为 "setProId" ,并且 参数列表的数据类型 int, 并且 返回值是 void
              若存在这样的方法结构，说明对应的set方法是存在的
              否则就是不存在
        */
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method:methods) {
            Class<?>[] types = method.getParameterTypes(); //参数列表
            String type = "";
            for (Class<?> a:types) {
                type += a;
            }
            // System.out.println(type);
            if(method.getName().equals(fieldName)&& type.equals("int")&& String.valueOf(method.getReturnType()).equals("void"))
                return true;
        }
        return false;
    }

    public static void main(String[] args) {
        boolean result1 = hasGetMethod(Product.class, "proId");
        System.out.println(result1);
        boolean result2 = hasSetMethod(Product.class, "proId");
        System.out.println(result2);
    }
}
